/**
 * 植物编号转换工具类
 * 提供根据植物名称获取编号，或根据编号获取植物名称的功能
 */
export class PlantConverter {
  // 植物数据映射表
  private static plantMap: Map<number, string> = new Map([
    [1, '白鲜皮'],
    [2, '白芷'],
    [3, '薄荷'],
    [4, '苍耳子'],
    [5, '柴胡'],
    [6, '蝉蜕'],
    [7, '淡豆豉'],
    [8, '淡竹叶'],
    [9, '防风'],
    [10, '藁本'],
    [11, '葛根'],
    [12, '桂枝'],
    [13, '寒水石'],
    [14, '黄柏'],
    [15, '黄连'],
    [16, '黄芩'],
    [17, '荆芥'],
    [18, '荆芥炭'],
    [19, '菊花'],
    [20, '决明子'],
    [21, '苦参'],
    [22, '龙胆'],
    [23, '芦根'],
    [24, '麻黄'],
    [25, '蔓荆子'],
    [26, '牛蒡子'],
    [27, '羌活'],
    [28, '秦皮'],
    [29, '桑叶'],
    [30, '升麻'],
    [31, '生姜'],
    [32, '石膏'],
    [33, '天花粉'],
    [34, '细辛'],
    [35, '夏枯草'],
    [36, '香薷'],
    [37, '辛夷'],
    [38, '知母'],
    [39, '栀子'],
    [40, '紫苏梗'],
    [41, '紫苏叶']
  ]);

  /**
   * 根据植物编号获取植物名称
   * @param id 植物编号
   * @returns 植物名称，如果未找到则返回undefined
   */
  static getNameById(id: number): string | undefined {
    return this.plantMap.get(id);
  }

  /**
   * 根据植物名称获取编号
   * @param name 植物名称
   * @returns 植物编号，如果未找到则返回undefined
   */
  static getIdByName(name: string): number | undefined {
    for (const [id, plantName] of this.plantMap.entries()) {
      if (plantName === name) {
        return id;
      }
    }
    return undefined;
  }

  /**
   * 获取所有植物列表
   * @returns 包含所有植物编号和名称的数组
   */
  static getAllPlants(): { id: number; name: string }[] {
    const plants: { id: number; name: string }[] = [];
    for (const [id, name] of this.plantMap.entries()) {
      plants.push({ id, name });
    }
    return plants;
  }
}